<!DOCTYPE html>
<html>

<head>
  <title>Quarkus - Using Security with .properties File</title>
  <script id="adobe_dtm" src="https://www.redhat.com/dtm.js" type="text/javascript"></script>
  <script src="/assets/javascript/highlight.pack.js" type="text/javascript"></script>
  <META HTTP-EQUIV='Content-Security-Policy' CONTENT="default-src 'none'; script-src 'self' 'unsafe-eval' 'sha256-ANpuoVzuSex6VhqpYgsG25OHWVA1I+F6aGU04LoI+5s=' 'sha256-ipy9P/3rZZW06mTLAR0EnXvxSNcnfSDPLDuh3kzbB1w=' js.bizographics.com https://www.redhat.com assets.adobedtm.com jsonip.com https://ajax.googleapis.com https://www.googletagmanager.com https://www.google-analytics.com https://use.fontawesome.com; style-src 'self' https://fonts.googleapis.com https://use.fontawesome.com; img-src 'self' *; media-src 'self' ; frame-src https://www.googletagmanager.com https://www.youtube.com; frame-ancestors 'none'; base-uri 'none'; object-src 'none'; form-action 'none'; font-src 'self' https://use.fontawesome.com https://fonts.gstatic.com;">
  <META HTTP-EQUIV='X-Frame-Options' CONTENT="DENY">
  <META HTTP-EQUIV='X-XSS-Protection' CONTENT="1; mode=block">
  <META HTTP-EQUIV='X-Content-Type-Options' CONTENT="nosniff">
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <meta name="description" content="Quarkus: Supersonic Subatomic Java">
  <meta name="twitter:card" content="summary_large_image">
  <meta name="twitter:site" content="@QuarkusIO"> 
  <meta name="twitter:creator" content="@QuarkusIO">
  <meta property="og:url" content="https://quarkus.io/guides/security-properties" />
  <meta property="og:title" content="Quarkus - Using Security with .properties File" />
  <meta property="og:description" content="Quarkus: Supersonic Subatomic Java" />
  <meta property="og:image" content="/assets/images/quarkus_card.png" />
  <link rel="canonical" href="https://quarkus.io/guides/security-properties">
  <link rel="shortcut icon" type="image/png" href="/favicon.ico" >
  <link rel="stylesheet" href="https://quarkus.io/guides/stylesheet/config.css" />
  <link rel="stylesheet" href="/assets/css/main.css" />
  <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.1.0/css/all.css" integrity="sha384-lKuwvrZot6UHsBSfcMvOkWwlCMgc0TaWr+30HWe3a4ltaBwTZhyTEggF5tJv8tbt" crossorigin="anonymous">
  <link rel="alternate" type="application/rss+xml"  href="https://quarkus.io/feed.xml" title="Quarkus">
  <script src="https://quarkus.io/assets/javascript/goan.js" type="text/javascript"></script>
  <script src="https://quarkus.io/assets/javascript/hl.js" type="text/javascript"></script>
</head>

<body class="guides">
  <!-- Google Tag Manager (noscript) -->
  <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-NJWS5L"
  height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
  <!-- End Google Tag Manager (noscript) -->

  <div class="nav-wrapper">
  <div class="grid-wrapper">
    <div class="width-12-12">
      <input type="checkbox" id="checkbox" />
      <nav id="main-nav" class="main-nav">
  <div class="container">
    <div class="logo-wrapper">
      
        <a href="/"><img src="/assets/images/quarkus_logo_horizontal_rgb_600px_reverse.png" class="project-logo" title="Quarkus"></a>
      
    </div>
    <label class="nav-toggle" for="checkbox">
      <i class="fa fa-bars"></i>
    </label>
    <div id="menu" class="menu">
      <span>
        <a href="/get-started/" class="">Get Started</a>
      </span>
      <span>
        <a href="/guides/" class="active">Guides</a>
      </span>
      <span>
        <a href="/community/" class="">Community</a>
      </span>
      <span>
        <a href="/support/" class="">Support</a>
      </span>
      <span>
        <a href="/blog/" class="">Blog</a>
      </span>
      <span>
        <a href="https://code.quarkus.io" class="button-cta secondary white">Start Coding</a>
      </span>
    </div>
  </div>
      </nav>
    </div>
  </div>
</div>

  <div class="content">
    <div class="guide">
  <div class="width-12-12">
    <h1 class="text-caps">Quarkus - Using Security with .properties File</h1>
    <div class="hide-mobile toc"><ul class="sectlevel1">
<li><a href="#configuration">Configuration</a>
<ul class="sectlevel2">
<li><a href="#properties-files-realm-configuration">Properties Files Realm Configuration</a></li>
<li><a href="#embedded-realm-configuration">Embedded Realm Configuration</a></li>
</ul>
</li>
</ul></div>
    <div>
      <div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>Quarkus provides support for properties file based authentication that is intended for
development and testing purposes. It is not recommended that this be used in production as at present only
plaintext and MD5 hashed passwords are used, and properties files are generally too limited to use in production.</p>
</div>
<div class="paragraph">
<p>Add the following to your <code>pom.xml</code>:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code data-lang="xml" class="language-xml hljs">&lt;dependency&gt;
    &lt;groupId&gt;io.quarkus&lt;/groupId&gt;
    &lt;artifactId&gt;quarkus-elytron-security-properties-file&lt;/artifactId&gt;
&lt;/dependency&gt;</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="configuration"><a class="anchor" href="#configuration"></a>Configuration</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The elytron-security-properties-file extension currently supports two different realms for the storage of authentication
and authorization information. Both support storage of this information in properties files. The following sections
detail the specific configuration properties.</p>
</div>
<div class="paragraph configuration-legend">
<p><span class="icon"><i class="fa fa-lock" title="Fixed at build time"></i></span> Configuration property fixed at build time - All other configuration properties are overridable at runtime</p>
</div>
<table class="tableblock frame-all grid-all stretch configuration-reference searchable">
<colgroup>
<col style="width: 80%;">
<col style="width: 10%;">
<col style="width: 10%;">
</colgroup>
<tbody>
<tr>
<th class="tableblock halign-left valign-top"><p class="tableblock"><a id="quarkus-elytron-security_configuration"></a><a href="#quarkus-elytron-security_configuration">Configuration property</a></p></th>
<th class="tableblock halign-left valign-middle"><p class="tableblock">Type</p></th>
<th class="tableblock halign-left valign-middle"><p class="tableblock">Default</p></th>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><a id="quarkus-elytron-security_quarkus.security.users.embedded.plain-text"></a><code><a href="#quarkus-elytron-security_quarkus.security.users.embedded.plain-text">quarkus.security.users.embedded.plain-text</a></code></p>
</div>
<div class="openblock description">
<div class="content">
<div class="paragraph">
<p>If the properties are stored in plain text. If this is false (the default) then it is expected that the passwords are of the form HEX( MD5( username ":" realm ":" password ) )</p>
</div>
</div>
</div></div></td>
<td class="tableblock halign-left valign-middle"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-middle"><p class="tableblock"><code>false</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><a id="quarkus-elytron-security_quarkus.security.users.embedded.users-users"></a><code><a href="#quarkus-elytron-security_quarkus.security.users.embedded.users-users">quarkus.security.users.embedded.users</a></code></p>
</div>
<div class="openblock description">
<div class="content">
<div class="paragraph">
<p>The realm users user1=password\nuser2=password2&#8230;&#8203; mapping. See <a href="#embedded-users">Embedded Users</a>.</p>
</div>
</div>
</div></div></td>
<td class="tableblock halign-left valign-middle"><p class="tableblock"><code>Map&lt;String,String&gt;</code></p></td>
<td class="tableblock halign-left valign-middle"><p class="tableblock"><code>none</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><a id="quarkus-elytron-security_quarkus.security.users.embedded.roles-roles"></a><code><a href="#quarkus-elytron-security_quarkus.security.users.embedded.roles-roles">quarkus.security.users.embedded.roles</a></code></p>
</div>
<div class="openblock description">
<div class="content">
<div class="paragraph">
<p>The realm roles user1=role1,role2,&#8230;&#8203;\nuser2=role1,role2,&#8230;&#8203; mapping See <a href="#embedded-roles">Embedded Roles</a>.</p>
</div>
</div>
</div></div></td>
<td class="tableblock halign-left valign-middle"><p class="tableblock"><code>Map&lt;String,String&gt;</code></p></td>
<td class="tableblock halign-left valign-middle"><p class="tableblock"><code>none</code></p></td>
</tr>
<tr>
<th class="tableblock halign-left valign-top"><p class="tableblock"><a id="quarkus-elytron-security_quarkus.security.users.file"></a><a href="#quarkus-elytron-security_quarkus.security.users.file">Property Files Realm Configuration</a></p></th>
<th class="tableblock halign-left valign-middle"><p class="tableblock">Type</p></th>
<th class="tableblock halign-left valign-middle"><p class="tableblock">Default</p></th>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><span class="icon"><i class="fa fa-lock" title="Fixed at build time"></i></span> <a id="quarkus-elytron-security_quarkus.security.users.file.realm-name"></a><code><a href="#quarkus-elytron-security_quarkus.security.users.file.realm-name">quarkus.security.users.file.realm-name</a></code></p>
</div>
<div class="openblock description">
<div class="content">
<div class="paragraph">
<p>The realm name. This is used when generating a hashed password</p>
</div>
</div>
</div></div></td>
<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-middle"><p class="tableblock"><code>Quarkus</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><span class="icon"><i class="fa fa-lock" title="Fixed at build time"></i></span> <a id="quarkus-elytron-security_quarkus.security.users.file.enabled"></a><code><a href="#quarkus-elytron-security_quarkus.security.users.file.enabled">quarkus.security.users.file.enabled</a></code></p>
</div>
<div class="openblock description">
<div class="content">
<div class="paragraph">
<p>Determine whether security via the file realm is enabled.</p>
</div>
</div>
</div></div></td>
<td class="tableblock halign-left valign-middle"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-middle"><p class="tableblock"><code>false</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><span class="icon"><i class="fa fa-lock" title="Fixed at build time"></i></span> <a id="quarkus-elytron-security_quarkus.security.users.file.plain-text"></a><code><a href="#quarkus-elytron-security_quarkus.security.users.file.plain-text">quarkus.security.users.file.plain-text</a></code></p>
</div>
<div class="openblock description">
<div class="content">
<div class="paragraph">
<p>If the properties are stored in plain text. If this is false (the default) then it is expected that the passwords are of the form HEX( MD5( username ":" realm ":" password ) )</p>
</div>
</div>
</div></div></td>
<td class="tableblock halign-left valign-middle"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-middle"><p class="tableblock"><code>false</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><span class="icon"><i class="fa fa-lock" title="Fixed at build time"></i></span> <a id="quarkus-elytron-security_quarkus.security.users.file.users"></a><code><a href="#quarkus-elytron-security_quarkus.security.users.file.users">quarkus.security.users.file.users</a></code></p>
</div>
<div class="openblock description">
<div class="content">
<div class="paragraph">
<p>Classpath resource name of properties file containing user to password mappings. See <a href="#users-properties">Users.properties</a>.</p>
</div>
</div>
</div></div></td>
<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-middle"><p class="tableblock"><code>users.properties</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><span class="icon"><i class="fa fa-lock" title="Fixed at build time"></i></span> <a id="quarkus-elytron-security_quarkus.security.users.file.roles"></a><code><a href="#quarkus-elytron-security_quarkus.security.users.file.roles">quarkus.security.users.file.roles</a></code></p>
</div>
<div class="openblock description">
<div class="content">
<div class="paragraph">
<p>Classpath resource name of properties file containing user to role mappings. See <a href="#roles-properties">Roles.properties</a>.</p>
</div>
</div>
</div></div></td>
<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-middle"><p class="tableblock"><code>roles.properties</code></p></td>
</tr>
<tr>
<th class="tableblock halign-left valign-top"><p class="tableblock"><a id="quarkus-elytron-security_quarkus.security.users.embedded"></a><a href="#quarkus-elytron-security_quarkus.security.users.embedded">Embedded Realm Configuration</a></p></th>
<th class="tableblock halign-left valign-middle"><p class="tableblock">Type</p></th>
<th class="tableblock halign-left valign-middle"><p class="tableblock">Default</p></th>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><span class="icon"><i class="fa fa-lock" title="Fixed at build time"></i></span> <a id="quarkus-elytron-security_quarkus.security.users.embedded.realm-name"></a><code><a href="#quarkus-elytron-security_quarkus.security.users.embedded.realm-name">quarkus.security.users.embedded.realm-name</a></code></p>
</div>
<div class="openblock description">
<div class="content">
<div class="paragraph">
<p>The realm name. This is used when generating a hashed password</p>
</div>
</div>
</div></div></td>
<td class="tableblock halign-left valign-middle"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-middle"><p class="tableblock"><code>Quarkus</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><span class="icon"><i class="fa fa-lock" title="Fixed at build time"></i></span> <a id="quarkus-elytron-security_quarkus.security.users.embedded.enabled"></a><code><a href="#quarkus-elytron-security_quarkus.security.users.embedded.enabled">quarkus.security.users.embedded.enabled</a></code></p>
</div>
<div class="openblock description">
<div class="content">
<div class="paragraph">
<p>Determine whether security via the embedded realm is enabled.</p>
</div>
</div>
</div></div></td>
<td class="tableblock halign-left valign-middle"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-middle"><p class="tableblock"><code>false</code></p></td>
</tr>
</tbody>
</table>
<div class="sect2">
<h3 id="properties-files-realm-configuration"><a class="anchor" href="#properties-files-realm-configuration"></a>Properties Files Realm Configuration</h3>
<div class="paragraph">
<p>The properties files realm supports mapping of users to password and users to roles with a combination of properties files. They are configured with properties starting with <code>quarkus.security.users.file</code>.</p>
</div>
<div class="listingblock">
<div class="title">example application.properties file section for property files realm</div>
<div class="content">
<pre class="highlightjs highlight"><code data-lang="properties" class="language-properties hljs">quarkus.security.users.file.enabled=true
quarkus.security.users.file.users=test-users.properties
quarkus.security.users.file.roles=test-roles.properties
quarkus.security.users.file.realm-name=MyRealm
quarkus.security.users.file.plain-text=true</code></pre>
</div>
</div>
<div class="sect3">
<h4 id="users-properties"><a class="anchor" href="#users-properties"></a>Users.properties</h4>
<div class="paragraph">
<p>The <code>quarkus.security.users.file.users</code> configuration property specifies a classpath resource which is a properties file with a user to password mapping, one per line. The following <a href="#test-users-example">example test-users.properties file</a> illustrates the format:</p>
</div>
<div id="test-users-example" class="listingblock">
<div class="title">example test-users.properties file</div>
<div class="content">
<pre class="highlightjs highlight"><code data-lang="properties" class="language-properties hljs">scott=jb0ss <i class="conum" data-value="1"></i><b>(1)</b>
jdoe=p4ssw0rd <i class="conum" data-value="2"></i><b>(2)</b>
stuart=test
noadmin=n0Adm1n</code></pre>
</div>
</div>
<div class="colist arabic">
<table>
<tr>
<td><i class="conum" data-value="1"></i><b>1</b></td>
<td>User <code>scott</code> has password defined as <code>jb0ss</code></td>
</tr>
<tr>
<td><i class="conum" data-value="2"></i><b>2</b></td>
<td>User <code>jdoe</code> has password defined as <code>p4ssw0rd</code></td>
</tr>
</table>
</div>
<div class="paragraph">
<p>This file has the usernames and passwords stored in plain text, which is not recommended. If plain-text is set to false
(or omitted) in the config then passwords must be stored in the form <code>MD5 ( username : realm : password )</code>. This can
be generated for the first example above by running the command <code>echo -n scott:MyRealm:jb0ss | md5</code> from the command line.</p>
</div>
</div>
<div class="sect3">
<h4 id="roles-properties"><a class="anchor" href="#roles-properties"></a>Roles.properties</h4>
<div class="listingblock">
<div class="title">example test-roles.properties file</div>
<div class="content">
<pre class="highlightjs highlight"><code data-lang="properties" class="language-properties hljs">scott=Admin,admin,Tester,user <i class="conum" data-value="1"></i><b>(1)</b>
jdoe=NoRolesUser <i class="conum" data-value="2"></i><b>(2)</b>
stuart=admin,user <i class="conum" data-value="3"></i><b>(3)</b>
noadmin=user</code></pre>
</div>
</div>
<div class="colist arabic">
<table>
<tr>
<td><i class="conum" data-value="1"></i><b>1</b></td>
<td>User <code>scott</code> has been assigned the roles <code>Admin</code>, <code>admin</code>, <code>Tester</code> and <code>user</code></td>
</tr>
<tr>
<td><i class="conum" data-value="2"></i><b>2</b></td>
<td>User <code>jdoe</code> has been assigned the role <code>NoRolesUser</code></td>
</tr>
<tr>
<td><i class="conum" data-value="3"></i><b>3</b></td>
<td>User <code>stuart</code> has been assigned the roles <code>admin</code> and <code>user</code>.</td>
</tr>
</table>
</div>
</div>
</div>
<div class="sect2">
<h3 id="embedded-realm-configuration"><a class="anchor" href="#embedded-realm-configuration"></a>Embedded Realm Configuration</h3>
<div class="paragraph">
<p>The embedded realm also supports mapping of users to password and users to roles. It uses the main <code>application.properties</code> Quarkus configuration file to embed this information. They are configured with properties starting with <code>quarkus.security.users.embedded</code>.</p>
</div>
<div class="paragraph">
<p>The following is an example application.properties file section illustrating the embedded realm configuration:</p>
</div>
<div class="listingblock">
<div class="title">example application.properties file section for embedded realm</div>
<div class="content">
<pre class="highlightjs highlight"><code data-lang="properties" class="language-properties hljs">quarkus.security.users.embedded.enabled=true
quarkus.security.users.embedded.plain-text=true
quarkus.security.users.embedded.users.scott=jb0ss
quarkus.security.users.embedded.users.stuart=test
quarkus.security.users.embedded.users.jdoe=p4ssw0rd
quarkus.security.users.embedded.users.noadmin=n0Adm1n
quarkus.security.users.embedded.roles.scott=Admin,admin,Tester,user
quarkus.security.users.embedded.roles.stuart=admin,user
quarkus.security.users.embedded.roles.jdoe=NoRolesUser
quarkus.security.users.embedded.roles.noadmin=user</code></pre>
</div>
</div>
<div class="paragraph">
<p>As with the first example this file has the usernames and passwords stored in plain text, which is not recommended. If plain-text is set to false
(or omitted) in the config then passwords must be stored in the form <code>MD5 ( username : realm : password )</code>. This can
be generated for the first example above by running the command <code>echo -n scott:MyRealm:jb0ss | md5</code> from the command line.</p>
</div>
<div class="sect3">
<h4 id="embedded-users"><a class="anchor" href="#embedded-users"></a>Embedded Users</h4>
<div class="paragraph">
<p>The user to password mappings are specified in the <code>application.properties</code> file by properties keys of the form <code>quarkus.security.users.embedded.users.&lt;user&gt;=&lt;password&gt;</code>. The following <a href="#password-example">Example Passwords</a> illustrates the syntax with 4 user to password mappings:</p>
</div>
<div id="password-example" class="listingblock">
<div class="title">Example Passwords</div>
<div class="content">
<pre class="highlightjs highlight"><code data-lang="properties" class="language-properties hljs">quarkus.security.users.embedded.users.scott=jb0ss <i class="conum" data-value="1"></i><b>(1)</b>
quarkus.security.users.embedded.users.stuart=test <i class="conum" data-value="2"></i><b>(2)</b>
quarkus.security.users.embedded.users.jdoe=p4ssw0rd
quarkus.security.users.embedded.users.noadmin=n0Adm1n</code></pre>
</div>
</div>
<div class="colist arabic">
<table>
<tr>
<td><i class="conum" data-value="1"></i><b>1</b></td>
<td>User <code>scott</code> has password <code>jb0ss</code></td>
</tr>
<tr>
<td><i class="conum" data-value="2"></i><b>2</b></td>
<td>User <code>stuart</code> has password <code>test</code></td>
</tr>
</table>
</div>
</div>
<div class="sect3">
<h4 id="embedded-roles"><a class="anchor" href="#embedded-roles"></a>Embedded Roles</h4>
<div class="paragraph">
<p>The user to role mappings are specified in the <code>application.properties</code> file by properties keys of the form <code>quarkus.security.users.embedded.roles.&lt;user&gt;=role1[,role2[,role3[,&#8230;&#8203;]]]</code>. The following <a href="#roles-example">Example Roles</a> illustrates the syntax with 4 user to role mappings:</p>
</div>
<div id="roles-example" class="listingblock">
<div class="title">Example Roles</div>
<div class="content">
<pre class="highlightjs highlight"><code data-lang="properties" class="language-properties hljs">quarkus.security.users.embedded.roles.scott=Admin,admin,Tester,user <i class="conum" data-value="1"></i><b>(1)</b>
quarkus.security.users.embedded.roles.stuart=admin,user <i class="conum" data-value="2"></i><b>(2)</b>
quarkus.security.users.embedded.roles.jdoe=NoRolesUser
quarkus.security.users.embedded.roles.noadmin=user</code></pre>
</div>
</div>
<div class="colist arabic">
<table>
<tr>
<td><i class="conum" data-value="1"></i><b>1</b></td>
<td>User <code>scott</code> has roles <code>Admin</code>, <code>admin</code>, <code>Tester</code>, and <code>user</code></td>
</tr>
<tr>
<td><i class="conum" data-value="2"></i><b>2</b></td>
<td>User <code>stuart</code> has roles <code>admin</code> and <code>user</code></td>
</tr>
</table>
</div>
</div>
</div>
</div>
</div>
    </div>
  </div>
</div>

  </div>

  <div class="content project-footer">
  <div class="footer-section">
    <div class="logo-wrapper">
      <a href="/"><img src="/assets/images/quarkus_logo_horizontal_rgb_reverse.svg" class="project-logo" title="Quarkus"></a>
    </div>
  </div>
  <div class="grid-wrapper">
    <p class="grid__item width-3-12">Quarkus is open. All dependencies of this project are available under the <a href='https://www.apache.org/licenses/LICENSE-2.0' target='_blank'>Apache Software License 2.0</a> or compatible license.<br /><br />This website was built with <a href='https://jekyllrb.com/' target='_blank'>Jekyll</a>, is hosted on <a href='https://pages.github.com/' target='_blank'>Github Pages</a> and is completely open source. If you want to make it better, <a href='https://github.com/quarkusio/quarkusio.github.io' target='_blank'>fork the website</a> and show us what you’ve got.</p>

    
      <div class="width-1-12 project-links">
        <span>Navigation</span>
        <ul class="footer-links width-1-12">
          
            <li><a href="/">Home</a></li>
          
            <li><a href="/guides">Guides</a></li>
          
            <li><a href="/community/#contributing">Contribute</a></li>
          
            <li><a href="/faq">FAQ</a></li>
          
            <li><a href="/get-started">Get Started</a></li>
          
        </ul>
      </div>
    
      <div class="width-1-12 project-links">
        <span>Contribute</span>
        <ul class="footer-links width-1-12">
          
            <li><a href="https://twitter.com/quarkusio">Follow us</a></li>
          
            <li><a href="https://github.com/quarkusio">GitHub</a></li>
          
            <li><a href="/security">Security&nbsp;policy</a></li>
          
        </ul>
      </div>
    
      <div class="width-1-12 project-links">
        <span>Get Help</span>
        <ul class="footer-links width-1-12">
          
            <li><a href="https://groups.google.com/forum/#!forum/quarkus-dev">Forums</a></li>
          
            <li><a href="https://quarkusio.zulipchat.com">Chatroom</a></li>
          
        </ul>
      </div>
    

    
      <div class="width-3-12 more-links">
        <span>Quarkus is made of community projects</span>
        <ul class="footer-links">
          
            <li><a href="https://vertx.io/" target="_blank">Eclipse Vert.x</a></li>
          
            <li><a href="https://microprofile.io" target="_blank">Eclipse MicroProfile</a></li>
          
            <li><a href="https://hibernate.org" target="_blank">Hibernate</a></li>
          
            <li><a href="https://netty.io" target="_blank">Netty</a></li>
          
            <li><a href="https://resteasy.github.io" target="_blank">RESTEasy</a></li>
          
            <li><a href="https://camel.apache.org" target="_blank">Apache Camel</a></li>
          
            <li><a href="https://code.quarkus.io/" target="_blank">And many more...</a></li>
          
        </ul>
      </div>
    
  </div>
</div>
  <div class="content redhat-footer">
  <div class="grid-wrapper">
    <span class="licence">
      <i class="fab fa-creative-commons"></i><i class="fab fa-creative-commons-by"></i> <a href="https://creativecommons.org/licenses/by/3.0/" target="_blank">CC by 3.0</a> | <a href="https://www.redhat.com/en/about/privacy-policy">Privacy Policy</a>
    </span>
    <span class="redhat">
      Sponsored by
    </span>
    <span class="redhat-logo">
      <a href="https://www.redhat.com/" target="_blank"><img src="/assets/images/redhat_reversed.svg"></a>
    </span>
  </div>
</div>


  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js" integrity="sha384-8gBf6Y4YYq7Jx97PIqmTwLPin4hxIzQw5aDmUg/DDhul9fFpbbLcLh3nTIIDJKhx" crossorigin="anonymous"></script>
  <script type="text/javascript" src="/assets/javascript/mobile-nav.js"></script>
  <script type="text/javascript" src="/assets/javascript/scroll-down.js"></script>
  <script src="/assets/javascript/satellite.js" type="text/javascript"></script>
  <script src="https://quarkus.io/guides/javascript/config.js" type="text/javascript"></script>
  <script src="/assets/javascript/search-filter.js" type="text/javascript"></script>
  <script src="/assets/javascript/back-to-top.js" type="text/javascript"></script>
</body>

</html>
